package com.hp.gxw.api;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.hp.gxw.constant.R;
import com.hp.gxw.entity.SaleOrder;
import com.hp.gxw.entity.SaleOrderDetails;
import com.hp.gxw.service.ISaleOrderService;
import com.hp.gxw.utils.DateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

@Component
@RequestMapping("/api/somain")
public class SomainApi {

    @Autowired
    private ISaleOrderService iSaleOrderService;

    /**
     * 销售订单数据接收
     * @param map
     * @return
     */
    @RequestMapping("/register")
    @ResponseBody
    public R somain_register(@RequestBody Map<String, Object> map){
        if(map == null){
            return R.error("参数为空");
        }
        SaleOrder saleOrder = new SaleOrder();
        saleOrder.setCreateTime(new Date());
        saleOrder.setStatus(false);
        saleOrder.setFixStatus(false);
        if(map.get("customerorder") != null){
            saleOrder.setCustomerOrder(map.get("customerorder").toString());
        }
        if(map.get("orderno") == null){
            return R.error("orderno为必填项");
        }
        saleOrder.setOrderNo(map.get("orderno").toString());
        SaleOrder orderno = iSaleOrderService.getOne(new LambdaQueryWrapper<SaleOrder>().eq(SaleOrder::getOrderNo, map.get("orderno").toString()));
        if(orderno != null){
            return R.error("销售订单号："+map.get("orderno").toString()+"，已经存在，请勿重复传递");
        }
        if(map.get("parentorderno") != null){
            saleOrder.setParentOrderNo(map.get("parentorderno").toString());
        }
        if(map.get("relatedorder") != null){
            saleOrder.setRelatedOrder(map.get("relatedorder").toString());
        }
        if(map.get("csocode") != null){
            saleOrder.setCsocode(map.get("csocode").toString());
        }
        if(map.get("cstcode") == null){
            return R.error("cstcode为必填项");
        }
        saleOrder.setCstcode(map.get("cstcode").toString());
        if(map.get("ywlx") == null){
            return R.error("ywlx为必填项");
        }
        saleOrder.setYwlx(map.get("ywlx").toString());
        if(map.get("ddate") == null){
            return R.error("ddate为必填项");
        }
        try {
            DateUtil.getDateFormat(map.get("ddate").toString());
            saleOrder.setDdate(map.get("ddate").toString());
        }catch (Exception e){
            return R.error("ddate格式不正确;格式：yyy-MM-dd HH:mm:ss");
        }
        if(map.get("ccusname") == null){
            return R.error("ccusname为必填项");
        }
        saleOrder.setCustomerName(map.get("ccusname").toString());
        if(map.get("ccuscode") == null){
            return R.error("ccuscode为必填项");
        }
        saleOrder.setCustomerCode(map.get("ccuscode").toString());
        if(map.get("cdepcode") == null){
            return R.error("cdepcode为必填项");
        }
        saleOrder.setCdepcode(map.get("cdepcode").toString());
        if(map.get("cexch_name") != null){
            saleOrder.setCexchName(map.get("cexch_name").toString());
        }
        if(map.get("cpersoncode") != null){
            saleOrder.setPersonName(map.get("cpersoncode").toString());
        }
        if(map.get("iexchrate") != null){
            saleOrder.setIexchrate(map.get("iexchrate").toString());
        }
        if(map.get("cmaker") != null){
            saleOrder.setCmaker(map.get("cmaker").toString());
        }
        if(map.get("cverifier") != null){
            saleOrder.setCverifier(map.get("cverifier").toString());
        }
        if(map.get("dverifydate") != null){
            saleOrder.setDverifydate(map.get("dverifydate").toString());
        }
        if(map.get("dverifysystime") != null){
            saleOrder.setDverifysystime(map.get("dverifysystime").toString());
        }

        if(map.get("cls") != null){
            saleOrder.setCls(map.get("cls").toString());
        }
        if(map.get("cplb") != null){
            saleOrder.setCplb(map.get("cplb").toString());
        }
        if(map.get("ddsx") != null){
            saleOrder.setDdsx(map.get("ddsx").toString());
        }

        if(map.get("details") == null){
            return R.error("表体详情数据不能为空");
        }

        List<SaleOrderDetails> saleOrderDetailsList = JSON.parseArray(JSON.toJSON(map.get("details")).toString(), SaleOrderDetails.class);
        if (saleOrderDetailsList.isEmpty()){
            return R.error("表体详情数据不能为空");
        }
        for(int i=0; i<saleOrderDetailsList.size(); i++){
            if(saleOrderDetailsList.get(i).getCinvcode() == null){
                return R.error("表体详情数据第"+(i+1)+"行cinvcode为空");
            }
            if(saleOrderDetailsList.get(i).getQty() == null || saleOrderDetailsList.get(i).getQty().compareTo(BigDecimal.ZERO) == 0){
                return R.error("表体详情数据第"+(i+1)+"行qty为空或者为0");
            }
//            if(saleOrderDetailsList.get(i).getCbatch() == null){
//                return R.error("表体详情数据第"+(i+1)+"行cbatch为空");
//            }
            if(saleOrderDetailsList.get(i).getCinvname() == null){
                return R.error("表体详情数据第"+(i+1)+"行cinvname为空");
            }
            if(saleOrderDetailsList.get(i).getType() == null){
                return R.error("表体详情数据第"+(i+1)+"行type为空");
            }
//            if(saleOrderDetailsList.get(i).getMesId() == null){
//                return R.error("表体详情数据第"+(i+1)+"行mesId为空");
//            }
            if(saleOrderDetailsList.get(i).getProcess() == null || saleOrderDetailsList.get(i).getProcess().size() < 1){
                return R.error("表体详情数据第"+(i+1)+"行process订单工序数据为空");
            }
            if(saleOrderDetailsList.get(i).getCzjslx() == null){
                return R.error("表体详情数据第"+(i+1)+"行czjslx为空");
            }
            if(saleOrderDetailsList.get(i).getCplb() == null){
                return R.error("表体详情数据第"+(i+1)+"行cplb为空");
            }
//            if(saleOrderDetailsList.get(i).getSblx() == null){
//                return R.error("表体详情数据第"+(i+1)+"行sblx为空");
//            }
            saleOrderDetailsList.get(i).setCompletFlag(false);
            for(int j=0; j<saleOrderDetailsList.get(i).getProcess().size(); j++){
                if(saleOrderDetailsList.get(i).getProcess().get(j).getSerialNumber() == null){
                    return R.error("表体订单工序数据第"+(j+1)+"行serialNumber为空");
                }
                if(saleOrderDetailsList.get(i).getProcess().get(j).getOrderProcess() == null){
                    return R.error("表体订单工序数据第"+(j+1)+"行orderProcess为空");
                }
            }
        }
        try {
            iSaleOrderService.saveInfo(saleOrder, saleOrderDetailsList);
        }catch (Exception e){
            e.printStackTrace();
            return R.error("接口异常");
        }
        return R.ok("写入成功");
    }
}
